package pfc.dados.vista;

import java.util.List;

import pfc.dados.controlador.NivelGuardadoManager;
import pfc.dados.controlador.NivelManager;
import pfc.dados.modelo.Nivel;
import pfc.dados.modelo.NivelGuardado;

import com.opensymphony.xwork2.ActionSupport;


public class NivelGuardadoAction extends ActionSupport {

	private static final long serialVersionUID = 1663813098793286768L;
	
	private NivelGuardadoManager nivelGuardadoManager;
	private Nivel nivel;
	private NivelGuardado nivelGuardado;
	private Long id;
	private String nombre;
	private String nivelTablero;
	private String puntuacionTotal;
	private String posicionDado1;
	private String posicionDado2;
	private String posicionDado3;
	private String posicionDado4;
	private String posicionDado5;
	private String posicionDado6;
	private String posicionDado7;
	private String posicionDado8;
	private String posicionDado9;
	private String posicionDado10;
	
	private List<NivelGuardado> listaPartidas;
	
	public NivelGuardadoAction() {
		setNivelGuardadoManager(new NivelGuardadoManager());
	}

	
	/*
	 *Funcion para cargar la lista de las diferentes partidas guardadas 
	 */
	public String listaPartidas(){
		this.listaPartidas = nivelGuardadoManager.list();
		return SUCCESS;
	}
	
	
	/*
	 * Funcion para traerse el nivel concreto que se vaya a jugar
	 */
	public String obtenerNivelGuardado() {
		try {
			this.nivelGuardado = nivelGuardadoManager.get(new Long(getId()));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return SUCCESS;
	}

	/*
	 * Funcion para guardar el nivel por el que vayamos en ese momento
	 */
	public String guardarPartida() {
		this.nombre = getNombre();
		this.puntuacionTotal = getPuntuacionTotal();
		
		String[] posicionesJS = new String[10];
		posicionesJS[0] = getPosicionDado1();
		posicionesJS[1] = getPosicionDado2();
		posicionesJS[2] = getPosicionDado3();
		posicionesJS[3] = getPosicionDado4();
		posicionesJS[4] = getPosicionDado5();
		posicionesJS[5] = getPosicionDado6();
		posicionesJS[6] = getPosicionDado7();
		posicionesJS[7] = getPosicionDado8();
		posicionesJS[8] = getPosicionDado9();
		posicionesJS[9] = getPosicionDado10();
		
		String[] posicionesIniciales = new String[10];
		String[] caraDados = new String[10];
		try {
			this.nivel = NivelManager.get(new Long(getNivelTablero()));
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
		//Voy viendo que dado es el primero, el segundo....
		boolean esNulo=false;
		for(int i=0;i<10 && !esNulo;i++){
			if(posicionesJS[i]!=null){
				String[] desglosePosicionDado=posicionesJS[i].split("-");
				
				posicionesIniciales[i] = desglosePosicionDado[0];
				caraDados[i] = desglosePosicionDado[1];
			}
			else{
				esNulo=true;
			}
		}

		this.nivelGuardado = new NivelGuardado();
		this.nivelGuardado.setNombrePartida(this.nombre);
		this.nivelGuardado.setNivel(this.nivel.getId());
		this.nivelGuardado.setPuntuacionNivel(this.nivel.getPuntuacion());
		this.nivelGuardado.setPuntuacionTotal(new Long(this.puntuacionTotal));
		
		this.nivelGuardado.setPosD1(posicionesIniciales[0]);
		this.nivelGuardado.setPosD2(posicionesIniciales[1]);
		this.nivelGuardado.setPosD3(posicionesIniciales[2]);
		this.nivelGuardado.setPosD4(posicionesIniciales[3]);
		this.nivelGuardado.setPosD5(posicionesIniciales[4]);
		this.nivelGuardado.setPosD6(posicionesIniciales[5]);
		this.nivelGuardado.setPosD7(posicionesIniciales[6]);
		this.nivelGuardado.setPosD8(posicionesIniciales[7]);
		this.nivelGuardado.setPosD9(posicionesIniciales[8]);
		this.nivelGuardado.setPosD10(posicionesIniciales[9]);

		this.nivelGuardado.setPosF1(this.nivel.getPosF1());
		this.nivelGuardado.setPosF2(this.nivel.getPosF2());
		this.nivelGuardado.setPosF3(this.nivel.getPosF3());
		this.nivelGuardado.setPosF4(this.nivel.getPosF4());
		this.nivelGuardado.setPosF5(this.nivel.getPosF5());
		this.nivelGuardado.setPosF6(this.nivel.getPosF6());
		this.nivelGuardado.setPosF7(this.nivel.getPosF7());
		this.nivelGuardado.setPosF8(this.nivel.getPosF8());
		this.nivelGuardado.setPosF9(this.nivel.getPosF9());
		this.nivelGuardado.setPosF10(this.nivel.getPosF10());
		
		this.nivelGuardado.setCaraDado1(caraDados[0]);
		this.nivelGuardado.setCaraDado2(caraDados[1]);
		this.nivelGuardado.setCaraDado3(caraDados[2]);
		this.nivelGuardado.setCaraDado4(caraDados[3]);
		this.nivelGuardado.setCaraDado5(caraDados[4]);
		this.nivelGuardado.setCaraDado6(caraDados[5]);
		this.nivelGuardado.setCaraDado7(caraDados[6]);
		this.nivelGuardado.setCaraDado8(caraDados[7]);
		this.nivelGuardado.setCaraDado9(caraDados[8]);
		this.nivelGuardado.setCaraDado10(caraDados[9]);
		
		try {
			nivelGuardadoManager.guardaNivel(this.nivelGuardado);
		} catch (Exception e) {
			e.printStackTrace();
		} 
		
		return SUCCESS;
	}

	public NivelGuardadoManager getNivelGuardadoManager() {
		return nivelGuardadoManager;
	}

	public void setNivelGuardadoManager(NivelGuardadoManager nivelGuardadoManager) {
		this.nivelGuardadoManager = nivelGuardadoManager;
	}
	
	public Nivel getNivel() {
		return nivel;
	}

	public void setNivel(Nivel nivel) {
		this.nivel = nivel;
	}

	public String getNivelTablero() {
		return nivelTablero;
	}

	public void setNivelTablero(String nivelTablero) {
		this.nivelTablero = nivelTablero;
	}

	public String getPuntuacionTotal(){
		return puntuacionTotal;
	}
	
	public void setPuntuacionTotal(String puntuacionTotal){
		this.puntuacionTotal = puntuacionTotal;
	}
	
	public NivelGuardado getNivelGuardado() {
		return nivelGuardado;
	}

	public void setNivelGuardado(NivelGuardado nivelGuardado) {
		this.nivelGuardado = nivelGuardado;
	}

	public String getPosicionDado1() {
		return posicionDado1;
	}

	public void setPosicionDado1(String posicionDado1) {
		this.posicionDado1 = posicionDado1;
	}

	public String getPosicionDado2() {
		return posicionDado2;
	}

	public void setPosicionDado2(String posicionDado2) {
		this.posicionDado2 = posicionDado2;
	}

	public String getPosicionDado3() {
		return posicionDado3;
	}

	public void setPosicionDado3(String posicionDado3) {
		this.posicionDado3 = posicionDado3;
	}

	public String getPosicionDado4() {
		return posicionDado4;
	}

	public void setPosicionDado4(String posicionDado4) {
		this.posicionDado4 = posicionDado4;
	}

	public String getPosicionDado5() {
		return posicionDado5;
	}

	public void setPosicionDado5(String posicionDado5) {
		this.posicionDado5 = posicionDado5;
	}

	public String getPosicionDado6() {
		return posicionDado6;
	}

	public void setPosicionDado6(String posicionDado6) {
		this.posicionDado6 = posicionDado6;
	}

	public String getPosicionDado7() {
		return posicionDado7;
	}

	public void setPosicionDado7(String posicionDado7) {
		this.posicionDado7 = posicionDado7;
	}

	public String getPosicionDado8() {
		return posicionDado8;
	}

	public void setPosicionDado8(String posicionDado8) {
		this.posicionDado8 = posicionDado8;
	}

	public String getPosicionDado9() {
		return posicionDado9;
	}

	public void setPosicionDado9(String posicionDado9) {
		this.posicionDado9 = posicionDado9;
	}

	public String getPosicionDado10() {
		return posicionDado10;
	}

	public void setPosicionDado10(String posicionDado10) {
		this.posicionDado10 = posicionDado10;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}


	public List<NivelGuardado> getListaPartidas() {
		return listaPartidas;
	}


	public void setListaPartidas(List<NivelGuardado> listaPartidas) {
		this.listaPartidas = listaPartidas;
	}
	
	
	public int calculaCamino(String posInicialDado,String posFinalDado){
		int x=Math.abs(new Integer(posInicialDado.substring(0,1))-new Integer(posFinalDado.substring(0,1)));
		int y=Math.abs(new Integer(posInicialDado.substring(2,3))-new Integer(posFinalDado.substring(2,3)));
			
		return x+y;
	}
}
